/*
Auteur        :Valentijn Polder
Studentnummer :0782531

$Log$

*/
#include <mod/include/IO_Expander_SPI.h>
#include <mod/include/SPI.h>

int IO_Expander_SPI_Init(void){
   return(SPI_Init(2,1,0,8,10));                          //Initialiseer SPI met select pin 2, Polarity met standaard laag, Data verstuurt leading edging lees following edge, 8bit's, divide mckdoor 5 voor clockspeed
}

void IO_Expander_SPI_TRISA_Write(unsigned char TRISA){
   SPI_Write(2,0x40,0);                                   //Zend chip adress write enabled
   SPI_Write(2,0x00,0);                                   //Stuur register adres
   SPI_Write(2,TRISA,1);                                  //Stuur de settings
}

int IO_Expander_SPI_TRISA_Read(void){
   SPI_Write(2,0x41,0);                                   //Zend chipadres read enabled
   SPI_Write(2,0x00,0);                                   //Stuur register adres
   SPI_Write(2,0x00,1);                                   //Stuur dummy byte voor clock cycles voor data terug
   return (SPI_Read(2));                                //Geef data terug
}

void IO_Expander_SPI_PORTA_Write(unsigned char PORTA){
   SPI_Write(2,0x40,0);                                   //Zend chip adres write enable
   SPI_Write(2,0x12,0);                                   //Stuur register adres
   SPI_Write(2,PORTA,1);                                  //stuur data voor uitgang port
}

int IO_Expander_SPI_PORTA_Read(void){
   SPI_Write(2,0x41,0);                                   //Zend chip adres read enabled
   SPI_Write(2,0x12,0);                                   //Zend register adres
   SPI_Write(2,0x00,1);                                   //Zend dummy byte voor clock cycles om data op te kunnen halen
   return (SPI_Read(2));                                //Geef data terug
}

void IO_Expander_SPI_TRISB_Write(unsigned char TRISB){
   SPI_Write(2,0x40,0);                                   //Zend chip adres write enable
   SPI_Write(2,0x01,0);                                   //Stuur register adres
   SPI_Write(2,TRISB,1);                                  //Stuur de settings
}

int IO_Expander_SPI_TRISB_Read(void){
   SPI_Write(2,0x41,0);                                   //Zend chip adres read enabled
   SPI_Write(2,0x01,0);                                   //Stuur register adres
   SPI_Write(2,0x00,1);                                   //Zend dummy byte voor clock cycles om data op te kunnen halen
   return (SPI_Read(2));                                //Geef data terug
}

void IO_Expander_SPI_PORTB_Write(unsigned char PORTB){
   SPI_Write(2,0x40,0);                                   //Zend chip adres write enable
   SPI_Write(2,0x15,0);                                   //Stuur register adres
   SPI_Write(2,PORTB,1);                                  //stuur data voor uitgang port
}

int IO_Expander_SPI_PORTB_Read(void){
   SPI_Write(2,0x41,0);                                   //Zend chip adres read enabled
   SPI_Write(2,0x13,0);                                   //Stuur register adres
   SPI_Write(2,0x00,1);                                   //Zend dummy byte voor clock cycles om data op te kunnen halen
   return (SPI_Read(2));                                //Geef data terug
}

int IO_Expander_Read(unsigned char adress){
   unsigned long int loop;
   SPI_Write(2,0x41,0);                                   //Zend chip adres read enabled
   SPI_Write(2,adress,0);                                   //Stuur register adres
   SPI_Write(2,0x00,0);                                   //Zend dummy byte voor clock cycles om data op te kunnen halen
   return (0xFF&SPI_Read(2));                                //Geef data terug
   loop=24000;
   while(loop--);
}
